package com.lwc.backendsinglestructure.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @Description: 分布式锁注解
 * @Author: lwc
 * @Date: 2021/1/27 16:05
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DistributeLock {

    /**
     * 业务模块
     * @return
     */
    String business();

    /**
     * 加锁的key，优先取key()，如果没有，则取keyExpression()
     *
     * @return
     */
    public String key() default "none";

    /**
     * SPEL表达式:
     * <pre>
     *     #id
     *     #insertResult.id
     * </pre>
     *
     * @return
     */
    public String keyExpression() default "none";

    /**
     * 锁的过期时间，默认-1，表示不设置过期时间
     * @return
     */
    long expireTime() default -1;

    /**
     * 获取锁的超时时间，默认-1，表示不设置超时时间
     * @return
     */
    long waitTime() default -1;

}
